iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0

分解Cat vs Ravbbit模型中的各個層次。為了方便講解,我們將取一個大小為224x224的且批次為 10 (10張224*224大小的圖片)的隨機 tensor,然後看看當我們將它通過網絡時會發生什麼。

input_image = torch.rand(3,224,224)
print(input_image.size())

https://ithelp.ithome.com.tw/upload/images/20230920/20153503xB7ajGVPeb.png

接著初始化nn.Flatten層,將每個 3D 的 224x224 圖像轉換成一個包含 150528 個像素值的連續數組,可以想像成將圖片攤平成一條線的概念:

flatten = nn.Flatten()
flat_image = flatten(input_image)
print(flat_image.size())

https://ithelp.ithome.com.tw/upload/images/20230920/20153503jn9pdypCyK.png

nn.Linear:線性層使用權重和偏差對輸入進行線性變換,這個就是最基本的神經網路,每個節點的輸出會=權重×輸入+偏差 :

https://ithelp.ithome.com.tw/upload/images/20230920/20153503V3naIaajf4.png

圖片來源

layer1 = nn.Linear(in_features=224*224, out_features=1024)
hidden1 = layer1(flat_image)
print(hidden1.size())

https://ithelp.ithome.com.tw/upload/images/20230920/20153503Ae77MCqBId.png

nn.ReLU:非線性激活函數在線性變換之後應用,引入非線性,有助於神經網絡學習各種現象。

https://ithelp.ithome.com.tw/upload/images/20230920/20153503xjsAumEjix.png

print(f"Before ReLU: {hidden1}\n\n")
hidden1 = nn.ReLU()(hidden1)
print(f"After ReLU: {hidden1}")

https://ithelp.ithome.com.tw/upload/images/20230920/20153503kuW5o4xVw7.png

nn.Sequential:是一個有序的容器。數據按照定義的順序通過所有模塊。您可以使用Sequential容器來快速組合一個網絡,就像seq_modules一樣。

seq_modules = nn.Sequential(
    flatten,
    layer1,
    nn.ReLU(),
    nn.Linear(1024, 10)
)
input_image = torch.rand(10, 3, 224, 224)
logits = seq_modules(input_image)

nn.Softmax:神經網絡的最後一個線性層返回logits,這是落在[-無窮, 無窮]範圍內的原始值。這些logits被傳遞給nn.Softmax,將它們縮放為落在[0, 1]範圍內的值,表示模型對每個類別的預測概率

https://ithelp.ithome.com.tw/upload/images/20230920/201535037dMvKTHQmK.png

softmax = nn.Softmax(dim=1)
pred_probab = softmax(logits)

結語

今天說明了神經網路每個曾的作用,這些隨然指示神經網路架構中的冰山一角,但是卻是非常關鍵的架構,若有興趣也可以看看數學理解為什麼會這樣被設計。


上一篇
Day14 創建神經網路的魔法
下一篇
Day16 因為學習而聰明 - AUTOMATIC DIFFERENTIATION
系列文
30天把AI知識傳授給女友30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言